-- 

ALTER TABLE public.comm
DROP CONSTRAINT IF EXISTS gestion_ai_opeplacomm;

DROP TABLE IF EXISTS public.opepla;

DROP SEQUENCE IF EXISTS public.seq_opepla;


CREATE SEQUENCE public.seq_opepla
    INCREMENT 1
    START 1
    MINVALUE 1
    MAXVALUE 9223372036854775807
    CACHE 1;

ALTER SEQUENCE public.seq_opepla
    OWNER TO abacouser;


CREATE TABLE IF NOT EXISTS public.opepla
(
    nro integer NOT NULL DEFAULT nextval('seq_opepla'::regclass),
    fecha timestamp without time zone NOT NULL,
    estado character varying(1) COLLATE pg_catalog."default" NOT NULL,
    fechaopetes timestamp without time zone NOT NULL,
    encargadoidpad integer,
    cajaidpad integer,
    efectivoalinicio numeric(14,2),
    efectivoalcierre numeric(14,2),
    diferenciaidcomm integer,
    observaciones character varying COLLATE pg_catalog."default",
    accesosucursalesuso character varying COLLATE pg_catalog."default",
    accesousuariosuso character varying COLLATE pg_catalog."default",
    codambsucdiferencia character varying COLLATE pg_catalog."default",
    idambdb integer,
    fechainsert timestamp without time zone,
    fechaupdate timestamp without time zone,
    useraudit character varying COLLATE pg_catalog."default",
    CONSTRAINT opepla_pkey PRIMARY KEY (nro),
    CONSTRAINT gestion_ai_ambsucopepla FOREIGN KEY (codambsucdiferencia)
        REFERENCES public.ambsuc (cod) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE RESTRICT,
    CONSTRAINT gestion_ai_opetesopepla FOREIGN KEY (fechaopetes)
        REFERENCES public.opetes (fecha) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE RESTRICT,
    CONSTRAINT gestion_ai_padopepla FOREIGN KEY (encargadoidpad)
        REFERENCES public.pad (id) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE RESTRICT
)
WITH (
    OIDS = TRUE
)
TABLESPACE pg_default;

ALTER TABLE public.opepla
    OWNER to abacouser;
	
	
COMMENT ON TABLE public.opepla
    IS 'Planillas de caja';

COMMENT ON COLUMN public.opepla.nro
    IS 'Numero de caja, consecutivo y automatico - hace las veces de ID por compatibilidad con comm';

COMMENT ON COLUMN public.opepla.fecha
    IS 'Fecha de la planilla';

COMMENT ON COLUMN public.opepla.estado
    IS 'A: Abierta, C: Cerrada, R: Reabierta (no implementado)';

COMMENT ON COLUMN public.opepla.fechaopetes
    IS 'Fecha de tesoreria, clave la relacion con OpeTes';

COMMENT ON COLUMN public.opepla.encargadoIdPad
    IS 'Entidad donde irán las diferencias de caja si hubiera';

COMMENT ON COLUMN public.opepla.cajaIdPad
    IS 'Caja donde irán las diferencias de caja si hubiera';

COMMENT ON COLUMN public.opepla.efectivoalinicio
    IS 'Efectivo en la caja al momento de la apertura -  es un valor ingresado por el operador';

COMMENT ON COLUMN public.opepla.efectivoalcierre
    IS 'Efectivo en la caja al momento del cierre -  es un valor ingresado por el operador - es posterior a la transferencia de valores';

COMMENT ON COLUMN public.opepla.diferenciaIdComm
    IS 'Id del comm donde se registro la diferencia (sin uso por ahora) puede servir para recalcular un cierre y borrar la diferencia anterior';

COMMENT ON COLUMN public.opepla.observaciones
    IS 'Permite ingresar un texto libre';

COMMENT ON COLUMN public.opepla.accesosucursalesuso
    IS 'Sucursales donde esta caja estará activa cuando este abierta - usa el esquema de accesosucursales - si la sucursal de trabajo machea con este campo la caja se activará';

COMMENT ON COLUMN public.opepla.accesousuariosuso
    IS 'Usuarios (perfiles) para los que esta caja estará activa cuando este abierta (trabajan junto son accesosucursalesuso)';

COMMENT ON COLUMN public.opepla.codambsucdiferencia
    IS 'Sucursal donde se debe generar el comprobante de diferencia (si hubiera)';
	
-- Relacion con COMM	

CREATE OR REPLACE FUNCTION public.tg_comm_del_upd_opepla()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF
AS $BODY$
BEGIN
  IF EXISTS (SELECT * FROM public.opepla WHERE estado = 'C' and OLD.NroOpePla = Nro ) then
     RAISE EXCEPTION 'No puede modificar o borrar un comprobante con su planilla de caja cerrada. Verifique';
  END IF;
  IF TG_OP = 'DELETE' THEN
    RETURN OLD;
  ELSE
    RETURN NEW;
  END IF;
END;
$BODY$;

ALTER FUNCTION public.tg_comm_del_upd_opepla()
    OWNER TO abacouser;


ALTER FUNCTION public.tg_comm_del_upd_opepla()
    OWNER TO abacouser;
	
DROP TRIGGER IF EXISTS comm_003_del_upd_opepla
ON public.comm;
	
CREATE TRIGGER comm_003_del_upd_opepla
    BEFORE DELETE OR UPDATE
    ON public.comm
    FOR EACH ROW
    EXECUTE PROCEDURE public.tg_comm_del_upd_opepla();
	
-- Carga en ambsegcfg para poder usar controles generales para accesosucursalesUso y accesousuariosUso

DELETE FROM public.ambsegcfg WHERE tabla = 'opepla';

INSERT INTO public.ambsegcfg(
	tabla, desctabla, tipoaccusuarios, tipoaccsucursales, configurable, actrubroshijos)
	VALUES ('opepla', 'Planillas de Caja', 'S', 'S' , 'S', 'N');

-- No puede borrar una caja que tiene algún comprobante creado

ALTER TABLE public.comm
    ADD CONSTRAINT gestion_ai_opeplacomm FOREIGN KEY (nroopepla)
    REFERENCES public.opepla (nro) MATCH SIMPLE
    ON UPDATE CASCADE
    ON DELETE RESTRICT;

--
SELECT aaVersion('517.00','516.07');
--	
	
	


